]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
App search: Match GenericName too
authorMatthias Clasen <mclasen@redhat.com>
Mon, 29 Oct 2012 15:12:55 +0000 (11:12 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 29 Oct 2012 15:24:36 +0000 (11:24 -0400)
This is making shell search results more useful in many cases,
such as 'web', 'browser', spreadsheet'.
https://bugzilla.gnome.org/show_bug.cgi?id=687121

src/shell-app.c

index 51a252498d6fcd6dd257ce2688e96e83fb52cb4d..8ff53ec7d8f9427ef850bd1da58ab9388ae212af 100644 (file)
@@ -73,6 +73,7 @@ struct _ShellApp
   char *window_id_string;
 
   char *casefolded_name;
+  char *casefolded_generic_name;
   char *name_collation_key;
   char *casefolded_exec;
   char **casefolded_keywords;
@@ -1310,6 +1311,7 @@ static void
 shell_app_init_search_data (ShellApp *app)
 {
   const char *name;
+  const char *generic_name;
   const char *exec;
   const char * const *keywords;
   char *normalized_exec;
@@ -1319,6 +1321,12 @@ shell_app_init_search_data (ShellApp *app)
   name = g_app_info_get_name (G_APP_INFO (appinfo));
   app->casefolded_name = shell_util_normalize_and_casefold (name);
 
+  generic_name = g_desktop_app_info_get_generic_name (appinfo);
+  if (generic_name)
+    app->casefolded_generic_name = shell_util_normalize_and_casefold (generic_name);
+  else
+    app->casefolded_generic_name = NULL;
+
   exec = g_app_info_get_executable (G_APP_INFO (appinfo));
   normalized_exec = shell_util_normalize_and_casefold (exec);
   app->casefolded_exec = trim_exec_line (normalized_exec);
@@ -1388,6 +1396,18 @@ _shell_app_match_search_terms (ShellApp  *app,
             current_match = MATCH_SUBSTRING;
         }
 
+      if (app->casefolded_generic_name)
+        {
+          p = strstr (app->casefolded_generic_name, term);
+          if (p != NULL)
+            {
+              if (p == app->casefolded_generic_name || *(p - 1) == ' ')
+                current_match = MATCH_PREFIX;
+              else if (current_match < MATCH_PREFIX)
+                current_match = MATCH_SUBSTRING;
+            }
+        }
+
       if (app->casefolded_exec)
         {
           p = strstr (app->casefolded_exec, term);
@@ -1497,6 +1517,7 @@ shell_app_finalize (GObject *object)
   g_free (app->window_id_string);
 
   g_free (app->casefolded_name);
+  g_free (app->casefolded_generic_name);
   g_free (app->name_collation_key);
   g_free (app->casefolded_exec);
   g_strfreev (app->casefolded_keywords);